package modelos
{
	import flash.utils.Dictionary;

	public class Diccionario
	{
		//================================================================================
		private var diccionario : Dictionary;
		private var longitud : int;
		//================================================================================
		
		//--------------------------------------------------------------------------------
		public function Diccionario()
		{
			diccionario = new Dictionary();
			longitud = 0;
		}

		//================================================================================
		//INTERFACE
		//================================================================================

		//--------------------------------------------------------------------------------
		public function toString():String
		{
			var salida : String = "";
			
			for each (var clave in Claves)
			{
				salida += Utiles.StringFormat("<{0}={1}>", clave, diccionario[clave]);
			}
			
			return salida;
		}

		//================================================================================
		//PROPIEDADES
		//================================================================================

		//--------------------------------------------------------------------------------
		public function get Longitud() : int
		{
			return longitud;
		}

		//--------------------------------------------------------------------------------
		public function get Claves() : Array
		{
			var claves : Array = [];
			for (var d in diccionario)
			{
				claves.push(d);
			}
			return claves;
		}

		//--------------------------------------------------------------------------------
		public function get Valores() : Array
		{
			var valores : Array = [];
			for each (var d in diccionario)
			{
				valores.push(d);
			}
			return valores;
		}
		
		//--------------------------------------------------------------------------------
		public function Existe(clave : *) : Boolean
		{
			return diccionario[clave] != null;
		}

		//================================================================================
		//ACCIONES
		//================================================================================

		//--------------------------------------------------------------------------------
		public function Definir(clave : *,valor : *) : void
		{
			diccionario[clave] = valor;
			longitud++;
		}

		//--------------------------------------------------------------------------------
		public function Valor(clave : *) : *
		{
			Utiles.Assert(Existe(clave), "Error: la clave no existe");
			return diccionario[clave];
		}

		//--------------------------------------------------------------------------------
		public function Remover(clave : *) : void
		{
			Utiles.Assert(Existe(clave), "Error: la clave no existe");
			diccionario[clave] = null;
			longitud--;
		}

	}
}